package com.wtwd.campus.vcom.service;

import com.wtwd.campus.vcom.common.RequestId;
import com.wtwd.campus.vcom.entity.VcomRequestRecord;

import java.util.List;
import java.util.Map;

/**
 * @Author: ldaoliang
 * @DateTime: 2022/1/6 10:37
 * @Description:
 */
public interface RequestRecordService {

    /**
     * 保存请求记录
     *
     * @param imei 设备imei
     * @param data 请求数据
     * @param type 类型1-sos 2-family 3-whiteList 4-免打扰 5-消息 6-短消息
     * @return 该条指令是否可以进行数据库操作及指令发送
     */
    RequestId saveRequestRecord(String imei, String data, int type);

    /**
     * 获取下一条应该发送的命令
     *
     * @param imei
     * @param requestId
     * @param type
     * @return
     */
    VcomRequestRecord getNextSendCommand(String imei, String requestId, int type);


    /**
     * 合并保存指令
     *
     * @param imeiList
     * @param data
     * @param type
     * @return
     */
    RequestId batchCommandSaveRequest(List<String> imeiList, String data, int type);

    /**
     * 获取RequestRecord
     *
     * @param imei
     * @param commandNumber
     * @param type
     * @return
     */
    Map<String, Object> getRequestRecordByCondition(String imei, String commandNumber, int type);

    Boolean updateVcomRequestStateById(int id, Integer state);

    /**
     * 根据imei 请求类型
     * <p>
     * 以及当前所处状态更新
     * 为失败
     *
     * @param imei
     * @param types
     * @param state
     * @return
     */
    Integer updateVcomRequestStateByTypesAndImei(String imei, List<Integer> types, List<Integer> states, int state);

    /**
     * 完成vcom所有记录
     *
     * @param imei
     * @return
     */
    boolean CompleteAllInstructions(String imei);

    /**
     * 根据该类型完成还类型的所有指令
     *
     * @param type
     * @return
     */
    boolean CompleteInstructionsByType(String imei, int type);


    /**
     * 恢复出厂设置
     *
     * @param imei
     * @return
     */
    RequestId factoryDataReset(String imei);

    /**
     * 设备恢复出厂设置
     *
     * @param imei
     * @param commandNumber
     * @return
     * @Param requestId
     */
    boolean sendDeviceReset(String imei, String requestId, String commandNumber);

    /**
     * 将指令存储为发送中
     *
     * @param imei
     * @param requestId
     * @param data
     * @param type
     * @param commandNumber
     * @return
     */
    boolean sendCommanding(String imei, String requestId, String data, Integer type, String commandNumber);
}
